GA4 + GTM + GSC • UTMs • Key Events
College of Business Administration - Cal Poly Pomona
2/16/2026
Live slides available at https://ccidm.github.io/measurement-stack-workshop-slides/ga4-gtm-gsc-workshop-slides.html
After taking this workshop, participants should be able to:
Digital marketing roles fall into 4 categories, and each needs this data stack differently.
(Writers, Social, Designers)
(SEO, PPC, Email Specialists)
(Analysts, Data Scientists)
(Managers, CMOs)
Use this to control the data pipeline. You configure Tags (what data to send) and Triggers (when to send it) without needing to edit the website code every time.
Use this to understand user behavior. This is where you view reports, analyze traffic sources, and measure if your marketing campaigns are generating revenue.
Use this to monitor search health. This provides technical feedback on site errors, indexing issues, and organic keyword performance that GA4 cannot see.
Tip
Use one Google account across tools.
Connect our Quarto site to the Google Marketing Platform (GA4 + GTM).
To follow along, you need:
Why this matters
We are moving from “static pages” to “measurable data” by injecting tracking codes into your live environment.
There are two main paths for building the “container” for your data ecosystem.
(Content Management Systems)
(Technical & Academic)
For this workshop
We will use RSMT’s website (Rising Stars Muay Thai). It is built in Quarto and is already connected/setup for us to analyze.
Before we touch the code/website, we need the containers.
GTM-XXXXXX).<head> and <body>).G-XXXXXXXX).mysite.com).<head> and <body> scripts.G-XXXXXXXX) for your website code.We will focus on the Overview reports to get a high-level health check of the business.
(Reports > Generate Leads > Overview)
(Reports > Understand web and/or app traffic > Overview)
(The Custom Report Builder)
G-XXXXXXXX.Note: Until you hit Publish, your changes are only saved in a “Draft” version.
page_view event is listed.Expected Outcome
If you see events populating the timeline in real-time, your connection is successful. If the timeline is empty, check if your ad blocker is on!
https://search.google.com/search-console/
Why do this?
When you click “Add Property” in GSC, you have two choices:
example.com, m.example.com, www.example.com, http://, https://.https://www.example.com).Google needs proof you own the site. Choose the method that fits your access level:
| Method | Difficulty | Best Use Case |
|---|---|---|
| DNS Record | High | Domain Property. Best for full coverage. Requires logging into GoDaddy/Namecheap. |
| HTML File | Medium | URL Prefix. You have FTP/File access to the server root. |
| HTML Tag | Low | URL Prefix. WordPress/Wix users. Copy/paste a meta tag into your header. |
| GA4 / GTM | Lowest | URL Prefix. If you already installed GA4/GTM (and have “Edit” permission), this verifies instantly! |
Data doesn’t appear automatically. You must Link and Publish.
Result: A new “Search Console” tab will appear in your main reporting menu, showing Queries and Landing Pages.
Without UTMs, GA4 can usually tell you where a user came from (e.g., “They came from Facebook”).
But it cannot tell you:
The Solution
UTM parameters are “tags” we add to the end of a link. They force GA4 to record exactly what we tell it to record. Example in GA4 > Reports > User acquisition > First user source / medium
| Parameter | Definition | Example |
|---|---|---|
utm_source |
The “Who” (The referrer) | google, newsletter, facebook |
utm_medium |
The “How” (Marketing channel) | cpc (paid), email, social |
utm_campaign |
The “Why” (Product/Promotion) | spring_sale, webinar_launch |
utm_content |
The “What” (Specific ad/link) | sidebar_link, video_ad, text_link |
utm_term |
The Keywords (Paid Search) | running+shoes, marketing+course |
Data is only useful if it is consistent.
GA4 treats Email, email, and EMAIL as three completely different traffic sources.
If five people on your team name campaigns differently, your reports will be unreadable.
spring-sale, Spring_Sale, springsale26spring_sale_2026 (Standardized)Goal: Create a tracking link for a LinkedIn post promoting the Spring Workshop.
| Parameter | Value | Logic |
|---|---|---|
| Website URL | https://yoursite.com |
Where they go. |
| Campaign Source | linkedin |
The specific site. |
| Campaign Medium | social |
The marketing channel. |
| Campaign Name | spring_workshop_2026 |
The strategic effort. |
Google has renamed metrics to align better with Google Ads.
| Old Term | New Term | Definition |
|---|---|---|
| Event | Event | Something happened (Page view, scroll). |
| Conversion | Key Event | Something important happened (Purchase, Signup). |
| N/A | Conversion | A Key Event shared with Google Ads for bidding. |
The Rule
In GA4, you measure Key Events. In Google Ads, you bid on Conversions.
In Google Tag Manager:
Page Path contains /thank-you/confirmed, /success - whatever your URL is).Logic: We only want this to fire when a user actually lands on the confirmation page.
In Google Tag Manager:
G-XXXXXXXX.generate_leadWhy generate_lead?
Using Google’s Recommended Event Names unlocks automatic reporting features in the dashboard.
Even if GTM sends the event, GA4 treats it as “just another event” until you tell it otherwise.
The “Immediate Fix” Method:
generate_lead exactly as you typed it in GTM.Why do this manually? Automatic detection can take 24 hours. Creating it manually ensures it is tracked as a Key Event immediately from the moment you publish.
You have completed Workshop 1: Collection. Here is the roadmap for the rest of the semester:
Next Up: Workshop 2 “The Data Warehouse” (BigQuery + SQL + Looker)
Future Sessions
https://github.com/CCIDM/portfolio-website-template.gitindex.qmd to customize your content.quarto publish netlify. You will be prompted to login to netlify. Create account or login.